home *** CD-ROM | disk | FTP | other *** search
- %---------------------------------------------------------------------
- %----Dining philosophers for Linda Prolog
- %----
- %----Written by Geoff Sutcliffe
- %---------------------------------------------------------------------
- dine(Number_of_philosophers,Number_of_eats,Machines):-
- length(Machines,Number_of_philosophers),
- First_philosopher_number is Number_of_philosophers -1,
- set_table_and_philosophers(First_philosopher_number,
- Number_of_philosophers,Number_of_eats,Machines).
- %---------------------------------------------------------------------
- %----Supply the room tickets, chopsticks and philosophers
- set_table_and_philosophers(0,Number_of_philosophers,Number_of_eats,
- [Machine]):-
- !,
- out(chopstick(0)),
- eval(Machine,try_eat(0,Number_of_philosophers,Number_of_eats),
- philosophers).
-
- set_table_and_philosophers(Philosopher_number,Number_of_philosophers,
- Number_of_eats,[Machine|Rest_of_machines]):-
- out(ticket),
- out(chopstick(Philosopher_number)),
- eval(Machine,try_eat(Philosopher_number,Number_of_philosophers,
- Number_of_eats),philosophers),
- Next_philosopher_number is Philosopher_number - 1,
- set_table_and_philosophers(Next_philosopher_number,
- Number_of_philosophers,Number_of_eats,Rest_of_machines).
- %---------------------------------------------------------------------
- try_eat(Philosopher_number,_,0):-
- send_request__(write(philosopher_completed_)),
- send_request__(writeln(Philosopher_number)).
-
- try_eat(Philosopher_number,Number_of_philosophers,Number_of_eats):-
- in(ticket),
- in(chopstick(Philosopher_number)),
- Next_chopstick_number is (Philosopher_number + 1) mod
- Number_of_philosophers,
- in(chopstick(Next_chopstick_number)),
- send_request__(write(philosopher_)),
- send_request__(write(Philosopher_number)),
- send_request__(write(is_eating_)),
- send_request__(writeln(Number_of_eats)),
- out(chopstick(Philosopher_number)),
- out(chopstick(Next_chopstick_number)),
- out(ticket),
- send_request__(write(philosopher_)),
- send_request__(write(Philosopher_number)),
- send_request__(writeln(is_thinking)),
- New_number_of_eats is Number_of_eats - 1,
- try_eat(Philosopher_number,Number_of_philosophers,
- New_number_of_eats).
- %---------------------------------------------------------------------
-